package config

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
	"myddns/model"
)

/* 声明全局变量 */
var g_appConfig *model.AppConfigOption
var g_targetFilePath string

func init() {
	fmt.Println("package config init")
}

/* 设置一个配置文件路径 */
func SetConfigFilePath(targetFilePath string) {
	fmt.Println("方法设置配置文件路径", targetFilePath)
	g_targetFilePath = targetFilePath
}

// 读取应用下的配置文件
func LoadConfig() *model.AppConfigOption {
	var jsonContent string

	if g_targetFilePath == "" {
		panic("需要首先设置 配置文件的路径")
	}

	fmt.Println("获取配置文件")
	if g_appConfig != nil {
		fmt.Println("读取配置 - 读全局变量", g_appConfig.Version)
		return g_appConfig
	}

	fmt.Println("读取配置 - 读文件")

	jsonContent = readFileToString(g_targetFilePath)

	// 打印文件内容
	fmt.Println(jsonContent)

	// 反序列化
	g_appConfig = jsonDeserialize(jsonContent)
	// fmt.Println("打印反序列化的结果")
	// fmt.Printf("%#v\n", g_appConfig)
	// fmt.Println("----------------")
	return g_appConfig

}

// JSON 反序列化
func jsonDeserialize(s string) *model.AppConfigOption {
	// 对Class反序列化
	c1 := model.AppConfigOption{}
	err := json.Unmarshal([]byte(s), &c1) //传指针是为了能在json包里修改p2的值
	if err != nil {
		fmt.Println("反序列化失败")
		return nil
	}
	return &c1
}

// 文件读取到字符串
func readFileToString(target_filePath string) string {

	data, err := ioutil.ReadFile(target_filePath)
	if err != nil {
		fmt.Println("read file err:", err.Error())
		panic("three")
	}

	return string(data)
}
